package com.shanxia.codec.cmd;

import com.shanxia.codec.ProtocolDataBase;
import com.shanxia.codec.enums.DecodeEnum;
import lombok.Data;

import static com.shanxia.codec.Decoder.*;

/**
 * C -> S
 * 充电桩应答服务器下发升级文件数据指令
 * 应答服务器指令，代表桩已正确接收服务下发的升级数据，可以 接收下一包了
 */
@Data
public class Cmd1008 extends ProtocolDataBase {

    public static final int MIN_SIZE = 8;

    private int serial;                 // 正确接收到的SN
    private int sign;                   // 写入成功标志
    private int v1;
    private int v2;

    public Cmd1008(){
        super.setCmd(1008);
    }

    public static Cmd1008 decodeFromBase(ProtocolDataBase protocolDataBase) {
        Cmd1008 cmd = new Cmd1008();
        cmd.copyDataFrom(protocolDataBase);
        byte[] dataField = protocolDataBase.getDataField();
        if (dataField.length < MIN_SIZE) {
            cmd.setResult(DecodeEnum.InvalidData);
            return cmd;
        }
        int offset = 0;
        // 1字节正确接收到的SN（指报文头部的“序列号域”）
        cmd.serial = getUint8(dataField[offset++]);
        // 1字节写入成功标志
        cmd.sign = getUint8(dataField[offset++]);
        // 2字节预留
        cmd.v1 = getUint16(dataField, offset);
        offset += 2;
        // 4字节预留
        cmd.v2 = bytesToIntLittle(dataField, offset);
        return cmd;
    }

    @Override
    public String toString() {

        StringBuffer buffer = new StringBuffer();
        buffer.append("#cmd1008#").append("\n");
        buffer.append("v1:").append(v1).append("\n");
        buffer.append("v2:").append(v2).append("\n");
        buffer.append("正确接收到的SN:").append(v2).append("\n");// 正确接收到 SN
        buffer.append("写入成功标志:").append(sign).append("\n");// 正确接收到 SN
        return buffer.toString();
    }
}
